﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Chapter15
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// 第15章 基本桌面编程
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            #region 01 XAML
            /*
             * 01 关注点分离
             * 02 XAML 基础知识
             * 02.01 名称空间
             * 02.02 代码隐藏文件
             * */
            #endregion

            #region 02 动手实践
            /*
             * 01 WPF 控件
             * 02 属性
             * 02.01 依赖属性
             * 02.02 附加属性
             * 03 事件
             * 03.01 处理事件
             * 03.02 路由事件
             * 03.03 路由命令
             * 03.04 控件类型
             * */
            #endregion

            #region 03 控件布局
            /*
             * Border 装饰控件
             * Canvas 无限制放置
             * DockPanel 贴靠边缘，最后一个充满放置
             * StackPanel 水平或垂直放置
             * WrapPanel 水平或垂直放置，超过就换行
             * Grid 可分行列，网络放置
             * 01 堆叠顺序
             * 容器中的第1个子控件位于最下方，最后一个子控件则位于最上方。
             * 02 对齐、边距、填充和尺寸
             * Margin 外间距，即外留白
             * Padding 内间距，即内留白
             * HorizontalAlignment 相对于父容器水平对齐
             * VerticalAlignment 相对于父容器垂直对齐
             * Height 高度
             * Width 宽度
             * 03 Border 控件
             * 04 Canvas 控件
             * 05 DockPanel 控件
             * 06 StakcPanel 控件
             * 06.01 WrapPanel 控件
             * 07 Grid 控件
             * */
            #endregion

            #region 04 游戏客户端
            /*
             * 01 About 窗口
             * 01.01 设计用户界面
             * 01.02 Image 控件
             * 01.03 Lable 控件
             * 01.04 TextBlock 控件
             * 01.05 Button 控件
             * 02 Options 窗口
             * 02.01 TextBox 控件
             * 02.02 CheckBox 控件
             * 02.03 RadioButton 控件
             * 02.04 ComboxBox 控件
             * 02.05 TabControl 控件
             * 02.06 处理 Options 窗口中的事件
             * 03 数据绑定
             * 03.01 DataContext 控件
             * 03.02 绑定到本地对象
             * 03.03 静态绑定到外部对象
             * 03.04 动态绑定到外部对象
             * 04 启动游戏
             * */
            #endregion

            #region 05 小结
            #endregion

            #region 06 练习
            #endregion

            #region 07 本章要点
            #endregion
        }

        public static RoutedCommand D1 = new RoutedCommand("D1", typeof(MainWindow));
        public static RoutedCommand D2 = new RoutedCommand("D2", typeof(MainWindow));
        public static RoutedCommand D3 = new RoutedCommand("D3", typeof(MainWindow));
        public static RoutedCommand E1 = new RoutedCommand("E1", typeof(MainWindow));
        public static RoutedCommand E2 = new RoutedCommand("E2", typeof(MainWindow));
        public static RoutedCommand About = new RoutedCommand("About", typeof(MainWindow));
        public static RoutedCommand Options = new RoutedCommand("Options", typeof(MainWindow));
        public static RoutedCommand StartGame = new RoutedCommand("StartGame", typeof(MainWindow));

        private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            if (e.Command == D1)
                new Code01.Demo().ShowDialog();
            if (e.Command == D2)
                new Code02.Demo().ShowDialog();
            if (e.Command == E1)
                new Code02.Example01().ShowDialog();
            if (e.Command == D3)
                new Code03.Demo().ShowDialog();
            if (e.Command == E2)
                new Code03.Example02().ShowDialog();
            if (e.Command == About)
                new Code04.KarliCards_GUI.About().ShowDialog();
            if (e.Command == Options)
                new Code04.KarliCards_GUI.Options().ShowDialog();
            if (e.Command == StartGame)
                new Code04.KarliCards_GUI.StartGame().ShowDialog();
        }
    }
}
